package com.leetcode.offer.chapter3;

/**
 * @author Dennis Li
 * @date 2020/7/12 20:06
 */
public class ArbitraryPow_16 {

    // 要求不需要考虑大数问题
    public double myPow(double x, int n) {
        if (n == 0) return 1.0;
        if (n == 1) return x;
        boolean negative = false;
        if (n < 0) {
            n = -n;
            negative = true;
        }
        // 执行平方运算
        double pow = myPow(x * x, n >> 1);
        // 判断奇偶 -- 是奇数一定少乘一个
        if ((n & 1) == 1) pow *= x;
        return negative ? 1.0 / pow : pow;
    }

}
